Systems, methods and computer readable media for managing multiple virtual machines

ABSTRACT

A system according to an embodiment of the present invention includes at least two virtual machines running on a hardware platform using either a hosted or a bare metal hypervisor. The virtual machines may communicate with an agent-server resident in the host operating system or in one of the virtual machines to switch control of the hardware component, such as graphics hardware, from one virtual machine to another.

CROSS-REFERENCE TO RELATED APPLICATION

This application claims priority to U.S. Provisional Patent Application Ser. No. 61/289,957 filed Dec. 23, 2009 which is incorporated herein by this reference.

TECHNICAL FIELD

Embodiments of the invention relate to the virtualization of computer hardware, and to systems, methods, and computer program products for controlling the use of multiple virtual computer machines.

BACKGROUND OF THE INVENTION

Virtualization of computer hardware may be used to increase the functionally of a given computer system. Different virtual machines may make use of the same hardware platform while operating as separate machines running their own operating system of either the same type, such as two instances of Windows, or different types, such as Windows and Linux.

To implement one or more virtual machines, a hypervisor may be implemented to facilitate communication between the hardware and the virtual machines. A hypervisor generally provides abstraction for controls necessary to operate a given hardware platform, which may include aspects like interrupts, central processing unit (CPU) scheduling, register allocation, BIOS control, and graphical display control. The hypervisor then facilitates communication between an operating system instance running in a virtual machine and the hardware platform. One type of hypervisor is referred to as a bare metal hypervisor. In a bare metal hypervisor, the hypervisor itself may directly control the hardware platform. The bare metal hypervisor may be implemented using a basic embedded operating system run the by the hypervisor itself. Another type of hypervisor facilitates communication between one or more operating system instances running on virtual machines and a host operating system. The hypervisor may facilitate communication between the virtual machines and the host operating system, which in turn controls the hardware platform.

Hardware virtualization may allow for a variety of advantages—including the need to purchase only a single hardware platform while running multiple seemingly separate machines. Each virtual machine may operate a different operating system, allowing one hardware platform to execute potentially incompatible applications, as one runs in the operating system of one virtual machine, and a second in the different operating system of another virtual machine.

While virtualization may have the potential to bring about advantages, in practice in may be difficult to manage the control of hardware components by multiple different virtual machines.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a schematic illustration of a computing system according to an embodiment of the present invention.

FIG. 2 is a schematic illustration of a computing system according to an embodiment of the present invention including a bare metal hypervisor.

FIG. 3 is a flowchart of a method that may be implemented by the computing system of FIG. 1 or FIG. 2.

FIG. 4 is a schematic illustration of the use of the computing system of FIG. 1 as a video surveillance system.

DETAILED DESCRIPTION

Certain details are set forth below to provide a sufficient understanding of embodiments of the invention. However, it will be clear to one skilled in the art that embodiments of the invention may be practiced without various of these particular details. In some instances, well-known computer system components, circuits, control signals, timing protocols, and software operations have not been shown in detail in order to avoid unnecessarily obscuring the described embodiments of the invention.

FIG. 1 is a schematic illustration of a computing system 100 according to an embodiment of the present invention. The system of FIG. 1 may be referred to as a hosted hypervisor system in that the system 100 includes virtual machines 120 and 122 which interface through the hypervisor 140 to a host operating system 110. The host operating system 110 in turn controls the hardware platform 105. The computing system 100 includes a hardware platform 105. As was generally described above, virtualization may allow the hardware platform 105 to be utilized by a host operating system 110 as well as a virtual machine 120. Although two virtual machines are shown in FIG. 1, any number may generally be used. The hardware platform 105 includes a processor unit 130 and a memory 132. Although shown in single boxes in FIG. 1, the processor unit 130 may include multiple processor devices, including for example a dual core processor. Similarly, the memory 132 may be implemented using any combination of memory or other storage devices.

The memory 132 may be encoded with computer readable instructions that allow the processor unit 130 to implement the host operating system 110 and virtual machines 120 and 122. In this manner, the hardware platform 105 may run the host operating system as well as any operating systems running in the virtual machines 120 and 122, illustrated respectively as operating systems A and B in FIG. 1. Although illustrated as separate operating systems, the host operating system and operating systems A and B may be any combination of different operating systems or different instances of a same operating system. Any operating system may be used including, but not limited to any Windows or Linux operating system.

The hardware platform 105 may include other hardware used by the host operating system 110 and the virtual machines 120 and 122. For example, graphics hardware 134 is shown in FIG. 1 and controls a display 136. Other hardware may also be included, for example additional processor units, additional memory, a USB interface, any other hardware or interface for controlling a peripheral or other device, and any combinations of these.

In the embodiment of FIG. 1, the graphics hardware 134 is controlled by the host operating system 110. That is, the host operating system 110 sends electronic signals, such as the issuance of commands and transmission of data, to the graphics hardware 134 in accordance with the operation of the host operating system 110. In other embodiments, the host operating system 110 may not control hardware components directly but may utilize a third party application programming interface (API) to control hardware components. As was described above, the virtual machine 120 may communicate with the graphics hardware 134 by interacting with a hypervisor 140. The hypervisor 140 is generally a software layer that may also be implemented by the processor unit 130 and memory 132. That is, the memory 132 may be encoded with computer readable instructions that cause the processor unit 130 to implement the hypervisor 140. Examples of commercially available hypervisors include, but are not limited to, VMWare, Xen, and hyperV. The hypervisor 140 receives input from the virtual machine 120, which may include for example commands, data or other electronic signals intended to control the graphics hardware 134, such as commands and data to be displayed on the display 136. The hypervisor 140 may then facilitate communication of the input from the virtual machine 120 to the host operating system 110. For example, the hypervisor 140 may reformulate the data or commands from the virtual machine 120 running operating system A into a format suitable for use with the host operating system 110.

In the embodiment of FIG. 1, the hypervisor 140 further receives input from the virtual machine 122 running operating system B. The input may include data, commands, or both, intended for the graphics hardware 134 to control the display 136. The hypervisor 140 may also facilitate communication between the virtual machine 122 and the host operating system 110. To facilitate communication between the two virtual machines 120 and 122 and the host operating system 110, the hypervisor 140 may for example store graphics data from the virtual machine 120 into one buffer (not shown) of the hardware platform 105 and graphics data from the virtual machine 122 into a different buffer (not shown) of the platform 105. The buffers may be stored in the memory 132 or other storage of the platform 105. The host operating system 110 then controls when and how data from the two buffers are rendered on the display 136 by the graphics hardware 134. It can be difficult for an end user, who may be working with an application hosted by the virtual machine 120 or 122 to easily and efficiently control the data that is ultimately displayed on the display 136. Access to and manipulation of the hypervisor 140 directly can be difficult or impossible.

The computer system 100 provides another mechanism for the virtual machines 120 and 122 to communicate with the host operating system 110. An agent 150 is implemented in the operating system A of the virtual machine 120 while an agent 152 is implemented in the operating system B of the virtual machine 122. The agents 150 and 152 may each be a software program running in the respective virtual machine, and the software for the agents 150 and 152 may be encoded along with the virtual machine in the memory 132 and executed by the processor unit 130. In some embodiments, some of the virtual machines may not include an agent.

An agent-server is implemented in the host operating system 110. The agent-server 154 may be implemented as a software program which may also be encoded in the memory 132 and executed by the processor unit 130. As will be described further below, the agents 150 and 152 may present a user of the respective virtual machine 120 or 122 with a list of virtual machines in the system 100. On receipt of a selection by the user, the agents 150 and 152 may communicate with the agent-server 154 to have the agent-server 154 issue commands in the host operating system 110 to control the graphics hardware 134 in accordance with the request. In this manner, the agents 150 and 152 and agent-server 154 may provide a communication path that may be supported by, but may be independent of, the hypervisor 140. While the hypervisor 140 may receive data and commands generated by the virtual machines 120 and 122 for the hardware platform 105, the agent-server may control what received data is ultimately rendered by the graphics hardware 134 on the display 136.

Communication between the agent 150 and the agent-server 154 and communication between the agent 152 and the agent-server 154 may occur over a virtualized Ethernet or other network implemented by the hypervisor 140 using interne protocol (IP) addresses of the agents 150 and 152 and agent-server 154. The hypervisor 140 may implement a shared directory 160 containing the current IP address associated with system components including the agents 150 and 152 and the agent-server 154. In this manner the agents 150 and 152 may poll the shared directory 160 to ensure any messages sent to the agent-server 154 are sent to the correct IP address. Other communication mechanisms may also be used.

A system 200 is shown in FIG. 2 using a bare metal hypervisor 205. In FIG. 2, the bare metal hypervisor 205 directly controls the hardware platform 105 and no host operating system may be present. The bare metal hypervisor 205 may be implemented using an embedded operating system. The bare metal hypervisor 205 may be implemented in software including computer readable instructions stored on the memory 132 and executed by the processor unit 130. Virtual machines 220, 222, and 224 each operate using a respective operating system A, B, and C. As with the system 100 of FIG. 1, the virtual machines 220, 222, and 224 may run different operating systems, different instances of the same operating system, or combinations of such operating systems. The virtual machines 220, 222, and 224 interface with the hardware platform 105 through the bare metal hypervisor 205.

The virtual machine 220 may include an agent 250. The agent 250 may be implemented in software that may be included in the software for the virtual machine 200. The software for the agent 250 may include computer readable instructions encoded on the memory 132 and executed by the processor unit 130. The agent 250 may be invoked by a user of the virtual machine 220, and the agent 250 may present a list of other virtual machines in the system 200 to the user. On selection of a virtual machine, the agent 250 communicates with an agent-server 254 that is running on another virtual machine in the system 200, for example virtual machine 224 shown in FIG. 2. Similarly, the agent 252 may communicate with the agent-server 254 requests made in the virtual machine 222. The agent-server 254 may then control which virtual machine's commands control a particular hardware component, such as the graphics hardware 134. The agent-server 254 may communicate with the graphics hardware through a hypervisor extension 256.

Communication between the agents 250 and 252 and the agent-server 254 may occur using a virtualized Ethernet implemented by the bare metal hypervisor 205. Other communication mechanisms may be used in addition or instead of virtualized Ethernet. To communicate via Ethernet, the agents 250 and 252 may send commands to the IP address of the agent-server 254. The IP address of the agent-server 254 may be stored in a shared directory 260 implemented by the bare metal hypervisor 205. The agents 250 and 252 may poll the shared directory 260 to ensure communications destined for the agent-server 254 are sent to the correct IP address.

Embodiments of systems according to the present invention have been described above. It is to be understood that the physical configuration of the systems may be flexible, in that all or portions of the described systems may be distributed across multiple pieces of hardware. Also, the descriptions provided above included graphics hardware in the hardware platform, but it is to be understood that systems according to the present invention may have other or additional hardware components controlled by the agents and agent-servers described herein. References to the graphics hardware are by way of example of a component that may advantageously be controlled according to embodiments of the invention. Also, agents and agent-servers have been described above as independent of hypervisors. This may be advantageous where software is not desired to depend on a particular hypervisor implementation. However, in other examples, the agent-server may be implemented in the hypervisor or as a hypervisor extension.

Methods implemented by systems according to embodiments of the present invention will now be described. FIG. 3 is a flowchart illustrating a method that may be implemented by the system 100 of FIG. 1 or the system 200 of FIG. 2 according to embodiments of the present invention. In block 302, a user launches an agent. The user may be an actual computer system human user, or may be another electronic process in communication with the system implementing the method of FIG. 3. The display 136 may be controlled by the virtual machine 120 and displaying data generated by the virtual machine 120 (see FIG. 1). For example, although not shown in FIG. 1, the virtual machine 120 may run a video surveillance application and the virtual machine 120 may be coupled to one or more video cameras. The display 136 may display a full-screen image of video surveillance data collected from one or more video cameras coupled to the virtual machine 120. If a user wants to view data from another virtual machine, the user may launch the agent 150. The agent may be launched in a variety of manners, and advantageously in a manner understandable by a user to launch a program. For example, the agent may be launched by selecting an icon associated with the agent, or selecting an icon in a system tray of the operating system. Since the agent 150 is running in the operating system of the virtual machine 120, it may be launched in a manner typically used to launch applications in the operating system of the virtual machine 120. In a similar manner, a user may launch the agent 152 in the virtual machine 122. With reference to FIG. 2, the user may launch the agent 250 in the virtual machine 220 or the agent 252 in the virtual machine 222. Alternatively, the agent may always be running, and a user interface associated with the agent may be minimized and accessible via an icon in the system tray or other manner.

As illustrated in block 304 of FIG. 3, the agent may display a list of virtual machines in the system. The agent may obtain the list by communicating with the agent-server in the system. So, for example, referring back to FIG. 1, the agent 150 may obtain a list of the other virtual machines in the system. In the example of FIG. 1, that would include just the virtual machine 122. The list may be obtained by communicating with the agent-server 154. The requesting virtual machine may or may not be included on the list returned by the agent-server 154. In the example of FIG. 2, the agent 250 may obtain a list of other virtual machines in the system, including the virtual machines 222 and 224, by communicating with the agent-server 254. The communication between the agents and the agent-server may occur in any manner, including over a virtualized Ethernet made available by the hypervisor. Each agent and the agent-server is assigned an IP address and the IP addresses is stored and updated in a shared directory maintained by the hypervisor, as described above. In this manner, the agents may obtain a list of including other virtual machines in the system without communicating directly with the other virtual machines. Further, in this manner, the communication between the agents and the agent-server, while it may take advantage of infrastructure provided by the hypervisor, is independent of the hypervisor implementation used.

On receipt of the list of virtual machines in the system, the agent may display the list. In the example of FIG. 1, the agent 150 may generate display data that is communicated by the virtual machine 120 through the hypervisor 140 to the host operating system 110 to the graphics hardware 134 and rendered on the display 136. The agent 152 may function in an analogous manner. In the example of FIG. 2, the agent 250 may generate display data that is communicated by the virtual machine 220 through the bare metal hypervisor 205 to the graphics hardware 134 and rendered on the display 136. In this manner, an end user may view a list of virtual machines in the system, and may make a selection from the list to select a virtual machine to control a hardware component, such as the graphics hardware in the hardware platform of the system. The agent receives the virtual machine selection in block 306, as illustrated in FIG. 3.

To pass control of the hardware component to the selected virtual machine, the agent communications the selection to the agent-server of the system in block 308. In the embodiment of FIG. 1, the agent 150 for example may issue a command to the agent-server 154 to pass control of the graphics hardware 134 to the virtual machine 122. In the embodiment of FIG. 2, the agent 250 for example may issue a command to the agent-server 254 to pass control of the graphics hardware 134 to the virtual machine 222 or 224. It is to be understood that control of other hardware components may also be changed in this manner. In particular, when control of graphics hardware is passed from one virtual machine to another, control of other components such as a keyboard and mouse or other input devices may also be passed to the virtual machine placed in control of the graphics hardware.

Once the agent-server receives the selection, the agent-server may implement the selection, as shown in block 310 of FIG. 3. The implementation of the selection may vary in accordance with the system used. When the agent-server is implemented in a host operating system, such as in the embodiment of FIG. 1, the agent-server 154 may issue a host operating system command to display data from the selected virtual machine, for example by issuing a command to maximize a window of the operating system associated with the selected virtual machine. Other windows may be minimized. When the agent-server is implemented with a bare metal hypervisor, such as in the embodiment of FIG. 2, the agent-server 254 may issue a command to the hypervisor 205 or the hypervisor extension to issue an appropriate command to change control of the hardware component in accordance with the selection, such as by maximizing a window associated with the selected virtual machine.

The method of FIG. 3 has been described with reference to switching control of a hardware component, such as graphics hardware, between virtual machines in a system. However, the method may also be used to switch control of the hardware component to an administrative console. Managing a system including virtual machines, such as the system 100 of FIG. 1 or the system 200 of FIG. 2 may also involve a variety of administrative functions or controls, including for example controls to start or stop one or more of the virtual machines, change parameters for one or more of the virtual machines, or monitor the states of one or more of the virtual machines. Configuring a virtual machine may be implemented by creating or modifying one or more configuration files useable by the hypervisor in the system. Starting or stopping a virtual machine may be implemented by starting or stopping one or more processes of the system's hypervisor. An administrative console may be provided for this purpose and may be implemented by the host operating system 110 of FIG. 1 or the bare metal hypervisor 205 of FIG. 2. The agent-server in the system may include the administrative console as an option along with the list of virtual machines in the system when the list is sent to an agent. A user may then select the administrative console as an option, and the agent-server may issue an appropriate command to transfer control of a hardware component, such as graphics hardware, to the administrative console. In the embodiment of FIG. 1, the agent-server may issue a command in the host operating system 110 to minimize all windows such that the administrative console is visible.

A use of the system of FIG. 1 in the context of video surveillance will now be described with reference to FIG. 4, a schematic illustration of multiple video cameras coupled to the system 100 of FIG. 1. Hardware virtualization in a video surveillance system may allow security practitioners to consolidate multiple video surveillance systems on a single hardware platform. Using embodiments of the present invention, different virtual machines may share same physical resources, work around logical limits (such as a limit on a number of supported cameras) and migrate cameras or storage between possibly incompatible software versions. The virtual machine 120 may run a video surveillance application 410 in the operating system A. The video surveillance application 410 may receive data from cameras 414 and 416. The virtual machine 122 may run a video surveillance application 412 in the operating system B. The video surveillance application 412 may receive data from a camera 418. Note that, in this manner, the system 100 may support incompatible video surveillance applications. For example, the video surveillance application 410 may be running in a Windows operating system while the video surveillance application 412 may be running in a Linux operating system, and yet the systems are implemented on the same hardware platform 105. Further, note that hardware limitations of the application 410 or 412 may be exceeded by the system 100. For example, the application 410 may have a restriction that only two cameras are supported. The system 100 may nonetheless support an additional camera by providing another instance of the application as the application 412 and connecting the camera 418.

Video surveillance data may advantageously be displayed in full screen mode by the display 136. Full screen mode may be preferred in some video surveillance applications to maximize screen real estate and display as many large sized high resolution camera feeds simultaneously as possible. Accordingly, embodiments of the present invention may be particularly advantageous for video surveillance applications to switch full screen control of the display 136 between the applications 410 and 412. This may represent an improvement over systems having control of an administrative console and virtual systems in a tiled window display that may limit screen real estate available for the application, and over overlapped windows which also may make point-and-click or selection access more difficult.

The system of FIG. 4 may also advantageously be used to transfer cameras gracefully from one system to another. For example, a system operator may desire to switch from the application 410 to the application 412, however it may be difficult, time consuming, or risky to switch all cameras in a video surveillance system at once. Accordingly, the system of FIG. 4 may be used to run the legacy application and a new application simultaneously. Cameras may then be transferred from one application to another one at a time, or otherwise in groups. For example, the camera 416 may be decoupled from the application 410 and coupled to the application 412. Once operation is satisfactorily established, the camera 414 may be transferred to the application 412. After all cameras are transferred, the virtual machine 120 may optionally be stopped. This allows a system administrator to reduce downtime and continue to utilize video data from the remaining cameras as one is transferred to a new program.

Embodiments of the present invention may provide a variety of advantages. Advantages descried herein are provided for explanatory purposes, and are not intended to be limiting. Not every embodiment of the present invention may exhibit all or even any of the advantages described. Embodiments of the present invention utilize agents running in the operating systems of the virtual machines, and an agent-server running either in a host operating system or in one of the virtual machines in the case of a bare metal hypervisor. The agent interface may appear to a user of the virtual machine in a manner the user is accustomed to in that operating system, such as an icon in a system tray. This may be advantageous over systems that are provided by the hypervisor itself and that are therefore external to the operating system of the virtual machine. If external to the virtual machine's operating system, the interface may be a special key sequence or mouse movement which may not be intuitive to the user, and may accordingly be difficult or prohibitive to use. Any special key sequence needed to manipulate an interface provided by the hypervisor may also be mixed-up with key sequences used by the operating system of a virtual machine, leading to a conflict in the system and confusion by the user. Further more, embodiments of agents and agent-servers described above are generally independent of hypervisor implementation and extensible both to hosted and bare metal hypervisors.

Embodiments of the present invention may also find use in cloud computing systems, where a number of virtual machines may be implemented on a hardware platform, which may be a distributed hardware platform. Cloud computing systems may make use of a bare metal hypervisor, as was depicted in FIG. 2. Embodiments of the agents and agent-servers described herein may be used to facilitate changing control of one or more particular hardware components in a cloud computing system from one virtual machine to another. Such functionality may be used, for example, to administer the cloud computing system.

From the foregoing it will be appreciated that, although specific embodiments of the invention have been described herein for purposes of illustration, various modifications may be made without deviating from the spirit and scope of the invention. 

1. A computer system comprising: a processing unit; a memory coupled to the processing unit; a hardware component coupled to the processing unit; a first virtual machine encoded on the memory and including computer readable instructions that when executed cause the processing unit to perform a method including running a first operating system instance and generating electronic signals for the hardware component in accordance with the first operating system instance; a second virtual machine encoded on the memory and including computer readable instructions encoded on the memory that when executed cause the processing unit to perform a method including running a second operating system instance and generating electronics signals for the hardware component in accordance with the second operating system instance; and an agent-server comprising computer readable instructions encoded on the memory that when executed cause the processing unit to perform a method comprising receiving an indication of a selection of one of the first and second virtual machines and controlling the hardware component using the electronic signals generated by the selected virtual machine.
 2. The computer system of claim 1, wherein the electronic signals are selected from the group consisting of data, commands, and data and commands.
 3. The computer system of claim 1, further comprising a hypervisor configured to control the hardware component and including computer readable instructions encoded on the memory that when executed cause the processing unit to reformulate the electronic signals generated by the first virtual machine in a manner suitable to control the hardware component directly.
 4. The computer system of claim 1, further comprising a host operating system configured to control the hardware component, the host operating system including computer readable instructions encoded on the memory that when executed cause the processing unit to perform a method comprising running a third operating system instance and generating electronic signals for the hardware component in accordance with the third operating system instance; and wherein the computer system further includes a hypervisor including computer readable instructions encoded on the memory that when executed cause the processing unit to perform a method comprising reformulating the electronic signals generated in accordance with one of the first and second operating system instances into electronic signals generated in accordance with the third operating system instance.
 5. The computer system of claim 1, wherein the first virtual machine further includes an agent having computer readable instructions encoded on the memory that when executed cause the processing unit to access a stored list of virtual machines encoded on the memory.
 6. The computer system of claim 5, wherein the agent further includes computer readable instructions encoded on the memory that when executed, cause the processing unit to generate control signals for display of the list of virtual machines.
 7. The computer system of claim 6, wherein the agent is further configured to generate the indication of the selected virtual machine.
 8. The computer system of claim 6, wherein the first and second virtual machines are each assigned an interne protocol address and wherein the stored list includes a list of the assigned IP addresses of the first and second virtual machines.
 9. The computer system of claim 1, wherein the hardware component includes a graphics processor.
 10. The computer system of claim 9, wherein the graphics processor is configured to control a display, and wherein the electronic signals generated in accordance with the first and second operating system instances include electronic signals for full-screen video display.
 11. A computer program product comprising computer readable instructions encoded on a computer readable medium, wherein the computer readable instructions when executed cause a processor unit to perform a method comprising: running a first operating system instance in a first virtual machine and generating electronic signals for a hardware component in accordance with the first operating system instance; running a second operating system instance in a second virtual machine and generating electronic signals for the hardware component in accordance with the second operating system instance; and receiving an indication within the first or second virtual machine of a selected virtual machine of the first and second virtual machines; and controlling the hardware component using the electronic signals generated by the selected virtual machine.
 12. The computer program product of claim 11, wherein the method further comprises: running a hypervisor configured to reformulate the electronic signals generated by the first virtual machine in a manner suitable to control the hardware component directly.
 13. The computer program product of claim 11, wherein the method further comprises running a third operating system instance and generating electronic signals for the hardware component in accordance with the third operating system; and reformulating the electronic signals generated in accordance with the first or second operating system instance into electronic signals generated in accordance with the third operating system instance.
 14. The computer program product of claim 11, wherein running the first operating system instance in the first virtual machine includes accessing a stored list of virtual machines operating on the computer system.
 15. The computer program product of claim 14, wherein running the first operating system instance in the first virtual machine include generating control signals for display of the list of virtual machines.
 16. The computer program product of claim 15, wherein the first virtual machine is further configured to generate the indication of the selected virtual machine.
 17. The computer program product of claim 14, wherein the first and second virtual machines are each assigned an interne protocol address and wherein the stored list includes a list of the assigned internet protocol addresses of the first and second virtual machines.
 18. The computer program product of claim 11, wherein the hardware component comprises a graphics processor.
 19. The computer program product of claim 18, wherein the graphics processor is configured to control a display, and wherein the electronic signals generated in accordance with the first and second operating system instances include electronic signals for full-screen video display.
 20. A method for managing control of a hardware component by a plurality of virtual machines including a first virtual machine and a second virtual machine, wherein the plurality of virtual machines are configured to run on a common hardware platform and wherein each of the plurality of virtual machines is configured to generate electronic signals for the hardware component in accordance with an operating system instance running in the respective virtual machine, the method comprising: storing a list of the plurality of virtual machines; displaying to a user of the first virtual machine the list of the plurality of virtual machines; receiving a request from the user of the first virtual machine to switch control of the hardware component to the second virtual machine; and communicating the request to an agent-server running on the common hardware platform; and changing control of the hardware component from the first virtual machine to the second virtual machine responsive to the request.
 21. The method of claim 20, wherein a host operating system is running on the common hardware platform, and wherein the agent-server is included in the host operating system.
 22. The method of claim 20, wherein the agent-server is included in the second virtual Machine.
 23. The method of claim 20, wherein the step of storing comprises storing an interne protocol address associated with each of the plurality of virtual machines, and wherein the step of communicating the request to the agent-server includes sending the request to an Internet protocol address associated with the agent-server.
 24. The method of claim 20, wherein the step of displaying is performed by an agent running within the first virtual machine.
 25. The method of claim 20, wherein the hardware component includes a graphics processor.
 26. The method of claim 25, wherein the first virtual machine is coupled to a first video camera and configured to run a first video surveillance application and the second virtual machine is coupled to a second video camera and configured to run a second video surveillance application, and wherein the changing control comprises changing from display of a full screen image from the first video camera to display of a full screen image from the second video camera.
 27. Any method described or shown herein.
 28. Any device described or shown herein.
 29. Any system described or shown herein.
 30. Any computer program product described or shown herein. 